angular.module('im.models', [])
    .factory('msg', function () { //Msg消息对象一般在查询与接收消息中回调返回
        /**
         *  chatType -- 会话类型,详见 IM_CONSTANT.CHAT_TYPE
         *  senderAccount -- 发送者帐号
         *  receiverId -- 接收者id, 0-userAccount 2-groupId
         *  msgType -- 消息类型
         *  sendTime -- 发送时间(秒)
         *  content  -- 文本消息内容
         *  extraData -- 附加信息
         *
         *  备注:
         *  Msg中的content分几种情况,详见 IM_CONSTANT.MSG_TYPE
         *      msgType==IM_CONSTANT.MSG_TYPE.TEXT
         *          or msgType==IM_CONSTANT.MSG_TYPE.USER_DEFINED
         *          content(String) -- 文本内容
         *      msgType==IM_CONSTANT.MSG_TYPE.IMG
         *          content(String) -- 图片文件url
         *      msgType==IM_CONSTANT.MSG_TYPE.VOICE
         *          content(String) -- 语音文件url
         */
        return {
            chatType: IM_CONSTANT.MSG_TYPE.TEXT,
            senderAccount: null,
            receiverId: null,
            msgType: null,
            sendTime: null,
            content: null,
            extraData: null
        };
    })
    .factory('chatSession', function () { //ChatSession会话对象
        /**
         * chatType -- 聊天类型,0-单聊 2-群聊
         * targetId -- 对方id, 分别为userAccount和groupId
         * msgNumber -- 未读消息数
         * lastChatTime -- 最后联系时间(毫秒ms)
         */
        return {
            chatType: null,
            targetId: null,
            msgNumber: null,
            lastChatTime: null
        };

    })
    .factory('group', function () { //Group群对象
        /**
         * groupId -- 群id
         * groupName -- 群名
         * groupHead -- 群头像,url表现形式
         * isPrivate -- 是否为私有群 0-公开群 1-私有群
         * needVerify -- 进群是否需要验证 0-不需要 1-需要群主验证
         * ownerAccount -- 群主帐号
         * maxUserNumber -- 群最大用户上限
         * groupInfo -- 群扩展信息
         */
        return {
            groupId: null,
            groupName: null,
            groupHead: null,
            isPrivate: null,
            needVerify: null,
            ownerAccount: null,
            maxUserNumber: null,
            groupInfo: null
        };
    })
    .factory('simpleGroup', function () { //SimpleGroup群对象
        /**
         * groupId -- 群id
         * groupName -- 群名
         * groupHead -- 群头像,url表现形式
         * isPrivate -- 是否为私有群 0-公开群 1-私有群
         * needVerify -- 进群是否需要验证 0-不需要 1-需要群主验证
         */
        return {
            groupId: null,
            groupName: null,
            groupHead: null,
            isPrivate: null,
            needVerify: null
        };
    })
    .factory('respUser', function () { //RespUser用户对象
        /**
         * account -- 帐号
         * nickname -- 昵称
         * sex -- 性别
         */
        return {
            account: null,
            nickname: null,
            sex: null
        };
    })
    .factory('user', function () {
        /**
         * account -- 帐号
         * nickname -- 昵称
         * head -- 头像url
         */
        return {
            account: null,
            nickname: null,
            head: null
        };
    })
    .factory('sysNotify', function () {
        /**
         * eventType -- 事件类型
         * userAccount -- 受影响用户帐号
         * operUserAccount -- 操作人帐号,不一定有。
         */
        return {
            eventType: null,
            userAccount: null,
            operUserAccount: null
        };
    })

    .factory('IM_STATUS', function () { //im 通信状态常量
        var IM_STATUS = {
            // 登陆相关
            LOGIN: {
                APPKEY_ERROR: 311,// AppKey Error
                PASSWORD_ERROR: 312,// Password Error
                LOGIN_KEY_ERROR: 313,// key Error
                INSIDE_ERROR: 314,// Server insert Error
                ACCOUNT_ERROR: 315,// Account not found
                CREATE_ID_ERROR: 316,// can't create it
                CREATE_ACCOUNT_ERROR: 317,// can't create it because id
                LOGIN_TYPE_ERROR: 318,// Login with error login type
                RE_LOGIN_ERROR: 319,// Re-Login But can not logout the old one
                REPEAT_OPER: 320,// repeat login
                TIMEOUT: 321 //login timeout
            },
            //登出相关
            LOGOUT: {
                FAIL: 505, //登陆失败
                INVALID_USER: 507 //无效的用户
            },
            //消息相关
            MSG: {
                RECEIVER_ERROR: 410, //接收者id不正确
                FAIL: 414,  //消息发送失败
                BROWER_NOT_SUPPORT: 415, //浏览器不支持跨域发送图片
                IMG_TYPE_ERROR: 416 //图片格式只支持jpg|jpeg|gif|png|bmp
            },
            GROUP: {
                NO_OPER_PERMISSION: 1001, //没有操作权限
                USER_HAS_IN_GROUP: 1003,  //当前用户已经在群中
                USER_NOT_FOUND_IN_GROUP: 1007,//当前群中用户不存在
                INVALID_USER_ACCOUNT: 1021, //无效的用户帐号名
                INVALID_GROUP_ID: 1025, //无效的群id
                DO_NOT_DEL_OWNER: 1029//不能删除群创建者
            },
            PARAM_IS_NULL: 300, //参数为空
            NO_LOGIN: 301,  //未登陆
            SUCCESS: 200, //成功
            FAIL: 300, //失败
            SYS_EXCEPTION: 500 //系统异常
        };
        return IM_STATUS;
    })
    .factory('IM_CONSTANT', function () {
        var IM_CONSTANT = {
            // 消息类型
            MSG_TYPE: {
                TEXT: 0, //文本消息
                SMALL_IMG: 2, //小图片,图片长宽小于300px
                IMG: 3,  //图片消息
                VOICE: 6, //语音消息
                USER_DEFINED: 8 //自定义消息
            },
            //聊天类型
            CHAT_TYPE: {
                USER: 0, //用户
                ROOM: 1, //聊天室
                GROUP: 2 //群
            },
            //通知
            NOTIFY: {
                GROUP: {
                    LEAVE: 'group.leave',
                    ENTER: 'group.enter',
                    KICKOUT: 'group.kickOut',
                    DISMISS: 'group.dismiss'
                }
            }
        };

        return IM_CONSTANT;
    })
;